import java.util.Random;
import java.util.Scanner;

public class Solution {
    public static void main(String[] args) {
//        choose();
        Solution s = new Solution();
        String str = "engineering";
        System.out.println(s.isUnique(str));
    }

    private static void choose() {
        /**
         * 代替我抉择今天下午是否打球（很久没有运动了）*/
        // 1 提示语句
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入yes后开始选择，请务必遵守结果，否则这段代码毫无意义！");

        // 2 开始选择
        boolean flag = true;
        while(flag) {
            System.out.print("输入：");
            String s = scanner.next();
            if("yes".equals(s)) {
                flag = false;
                Random random = new Random();
                int c = random.nextInt();
                if(c%2 == 0) {
                    System.out.print("打球");
                } else {
                    System.out.println("学习");
                }
            } else {
                System.out.println("输入错误，请重新输入！");
            }
        }
    }

    // 休息十分钟，至21：00 //

    public boolean isUnique1(String astr) {
        /**
         * 判断字符是否唯一
         *  解法1：使用数组作为hash表*/
        // 1 预处理
        char[] chars = astr.toCharArray();
        int[] arr = new int[26];

        // 2 映射至数组
        for(char c: chars) {
            arr[c-'a'] ++;
            if(arr[c-'a'] > 1) {
                return false;
            }
        }

        // 3 返回值
        return true;
    }

    public boolean isUnique(String astr) {
        /**
         * 判断字符串是否唯一
         *  解法2：位图*/
        // 1 预处理
        int hash = 0;

        // 2 开始处理
        for(char c: astr.toCharArray()) {
            int x = c-'a';
            // 判断对应位置是否为0
            if(((hash>>x)&1) == 0) {
                // 设置对应位置为1
                hash |= (1<<x);
            } else {
                return false;
            }
        }

        // 3 返回值
        return true;
    }
}
